DAL Update methode
Probleem
We hebben de id van de te wijzigen rij nodig om de te wijzigen rij in de tabel op te zoeken. De vullen de nieuwe waarden in in de eigenschappen van het Model. Als we de waarde niet willen wijzigen moeten we de oorspronkelijke waarde meegeven. De Update stored procedure verlangt immers alle waarden. De waarden die niet gewijzigd moeten worden en de te wijzigen waarden.
We willen feedback geven aan de gebruiker over de update. Er zijn drie toestanden die we in de gaten moeten houden:
- database foutmelding
- sql foutmelding
- update is gelukt
Design
We gebruiken een try catch om feedback te geven op systeemfouten en SQL server fouten. We interpreteren de retourwaarde van de ExecuteNonQuery
methode. Als parameter geven we een BBL object mee. In ASP.NET MVC is dat vaak het model. Als de Id niet bestaat zal SQL een 0 waarde retourneren.
Oplossing
Voeg de Update
methode aan de Dal
klasse:
public int Update(Bll.EventCategory bll) { MySqlConnection connection = new MySqlConnection(this.connectionString); // in de CommandText parameter geven we de naam van de stored procedure mee MySqlCommand command = new MySqlCommand("EventCategoryUpdate", connection); // zeg aan het command object dat het een stored procedure // zal krijgen en geen SQL Statement command.CommandType = CommandType.StoredProcedure; // voeg de parameters toe die aan de stored procedure doorgegeven moeten worden MySqlParameter pId = new MySqlParameter(); pId.ParameterName = "pId"; pId.DbType = DbType.Int32; // De Id van de rij die moet worden geüpdated pId.Value = bll.Id; command.Parameters.Add(pId); MySqlParameter pName = new MySqlParameter(); pName.ParameterName = "pName"; pName.DbType = DbType.String; pName.Value = bll.Name; command.Parameters.Add(pName); Message = "Niets te melden"; // we gaan ervan uit dat het mislukt int result = 0; using (connection) { try { connection.Open(); //Verbinding geslaagd result = command.ExecuteNonQuery(); // we moeten kijken naar de return van ExecuteNonQuery // retourneert het aantal rijen dat geüpdated is // is geüpdated als dat getal positief is if (result <= 0) { Message = $"De categorie met de naam {bll.Name} kon niet worden geüpdated!"; } else { Message = $"De categorie met de naam {bll.Name} is geüpdated!"; } } catch (MySqlException e) { this.message = e.Message; } RowCount = result; } // 0 of het aantal rijen dat geüpdated is return result; }
Testen
- Voeg de ReadOne methode toe in IDal:
using System.Collections.Generic; namespace FricFrac.Dal { interface IDal<T> { string Message { get; } int RowCount { get; } List<T> ReadAll(); T ReadOne(int id); int Create(T bll); int Update(T bll); } }
- Vervolledig de methode
FricFracDalTest
in het bestand Learning.cs:public static void FricFracDalTest() { Console.WriteLine(" Fric-frac DAL test"); FricFrac.Dal.EventCategory dal = new FricFrac.Dal.EventCategory(); List<FricFrac.Bll.EventCategory> list = dal.ReadAll(); Console.WriteLine($" {dal.RowCount} {dal.Message}"); foreach (FricFrac.Bll.EventCategory item in list) Console.WriteLine(" {0} {1}", item.Id, item.Name); FricFrac.Bll.EventCategory bll = new FricFrac.Bll.EventCategory(); bll = dal.ReadOne(4); Console.WriteLine($" {dal.RowCount} {dal.Message}"); bll = dal.ReadOne(200); // we lezen een bestaande categorie in bll = dal.ReadOne(6); Console.WriteLine($" {dal.RowCount} {dal.Message}"); // we proberen deze gevonden categorie weer toe te voegen dal.Create(bll); Console.WriteLine($" {dal.RowCount} {dal.Message}"); // we wijzigen de naam van de categorie bll.Name = "Hackathon Programmeren"; // En proberen die toe te voegen dal.Create(bll); Console.WriteLine($" {dal.RowCount} {dal.Message}"); // we zoeken de naam van de categorie bll.Name = "Hackathon Programmeren"; dal.ReadOne(bll.Id); // we wijzigen de naam van de categorie met Id = 6 bll.Name = "Hackathon Programmeren Deel 2"; // En proberen die te updaten dal.Update(bll); Console.WriteLine($" {dal.RowCount} rij(en) gewijzigd, {dal.Message}"); }
- Roep de methode op in Program.cs:
using System; namespace AdoDotNet { class Program { public static void Main(string[] args) { Console.WriteLine("Leren werken met ADO.NET in .NET Core!"); // Learning.TestMySqlConnector(); // Learning.ReflectPropertiesTryOut(); // Learning.LearnDotNetCoreConfigurationApi(); Learning.FricFracDalTest(); Console.ReadKey(); } } }
- En dat is het resultaat: